<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <style>
        
    </style>
</head>
<body>
    
</body>
<script>
    // b is not defined未声明，未定义
    // undefined，声明了，但未赋值




    // var声明的变量提升
    // console.log(a);
    // var a = 10;
    // console.log(a);

    // ========
    
    // console.log(fn);
    // function fn(){}
    // console.log(fn);
    
    // ========

    // console.log(fn);
    // var fn = function(){};
    // console.log(fn);


    // ========

    // console.log(fn);        // function fn(){}
    // var fn = "hello";
    // function fn(){}
    // console.log(fn);        // hello


    // ========

    // ;(function(){
    //     console.log(a);     // f2
    //     var a = "hello";
    //     console.log(a);     // hello
    //     function a(){ 1 };
    //     console.log(a);     // hello
    //     function a(){ 2 }
    //     console.log(a);     // hello
    //     var a = function(){ 3 }
    //     console.log(a);     // f3
    //     var a = "world";
    //     console.log(a);     // world
    // })();
    // 等价于
    // ;(function(){
    //     var a;
    //     var a;
    //     var a;
    //     function a(){ 1 };
    //     function a(){ 2 }
    //     console.log(a);     // f2
    //     a = "hello";
    //     console.log(a);     // hello
    //     console.log(a);     // hello
    //     console.log(a);     // hello
    //     a = function(){ 3 }
    //     console.log(a);     // f3
    //     a = "world";
    //     console.log(a);     // world
    // })();


    // ==========


    ;(function(){
        console.log(a);     // f5
        function a(){ 1 }
        console.log(a);     // f5
        function a(){ 2 }
        console.log(a);     // f5
        var a = function(){ 3 }
        console.log(a);     // f3
        function a(){ 4 }
        console.log(a);     // f3
        var a = "hello"
        console.log(a);     // hello
        function a(){ 5 }
        console.log(a);     // hello
    })();
    // 等价于
    // ;(function(){
    //     var a;
    //     var a;
    //     function a(){ 1 }
    //     function a(){ 2 }
    //     function a(){ 4 }
    //     function a(){ 5 }
    //     console.log(a);     // f5
    //     console.log(a);     // f5
    //     console.log(a);     // f5
    //     a = function(){ 3 }
    //     console.log(a);     // f3
    //     console.log(a);     // f3
    //     a = "hello"
    //     console.log(a);     // hello
    //     console.log(a);     // hello
    // })();

    





    
</script>
</html>